package jp.seraph.jsmf.motion;

import jp.seraph.jspf.pose.Pose;
import jp.seraph.jspf.pose.PoseElement;

/**
 * モーションを構成する最小要素 ひとつのポーズとそれを適用するための情報から構成される
 *
 * モーションについては、Motionインターフェースのコメントを参照のこと
 *
 * @see jp.seraph.jsmf.motion.Motion
 */
public interface MotionElement {
    /**
     * この要素が目的とするポーズに関する情報を返す
     *
     * @return
     */
    public PoseElement getPoseElement();

    public String getName();

    /**
     * この要素の適用が開始されるモーションセッションの百分率による達成度を返す
     *
     * 前提となる要素の達成度がこの値を超えた場合、この要素の適用が開始される。　前提となる要素がない場合、この値は無視される。
     *
     * @return
     */
    public int getStartPercentage();

    /**
     * この要素の適用の前提となる要素の名前を返す。
     * 前提となる要素が無い場合、空文字列を返す。
     *
     * @return
     */
    public String getConditionElementName();

    /**
     * この要素の適用前ポーズと現在のポーズから、この要素の達成度を計算して返す。
     *
     * @param aBasePose
     * @param aCurrentPose
     * @return
     */
    public int getCurrentPercentage(Pose aBasePose, Pose aCurrentPose);

    public ElementTask toTask(SessionTask aParentTask);
}
